﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using entgp.Code;
using Ext.Net;
using ENT.GP.Core.Proyecto;
using ENT.GP.Core.Lookup;
using ENT.GP.Core.Core;
using System.Xml;
using System.Xml.Xsl;
using ENT.GP.Core.Mail;  
namespace entgp.Proyectos.Desembolsos
{
    public partial class wucDesembolsos : ControlesUsuario
    {
        
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session.Count==0)
            {
                btnNuevoDesembolso.Disabled = true;
                //btnGuardar.Disabled = true;
                hidRol.Text = "Consulta";
            }
            if (!IsPostBack)
            {
                sTipoTransaccion.DataSource = TipoTransaccionLookup.GetNameValueList();
                sTipoTransaccion.DataBind();

            }
        }

        protected void ToExcel(object sender, EventArgs e)
        {
            string json = GridData.Value.ToString();
            StoreSubmitDataEventArgs eSubmit = new StoreSubmitDataEventArgs(json, null);
            XmlNode xml = eSubmit.Xml;

            this.Response.Clear();
            this.Response.ContentType = "application/vnd.ms-excel";
            this.Response.AddHeader("Content-Disposition", "attachment; filename=reporteDesembolsos.xls");
            XslCompiledTransform xtExcel = new XslCompiledTransform();
            xtExcel.Load(Server.MapPath("Excel.xsl"));
            xtExcel.Transform(xml, null, this.Response.OutputStream);
            this.Response.End();
        }
        //
       
        internal void Mostrar(int id,int iTipo)
        {
            
            int IdProy = id;//Convert.ToInt32(Request.QueryString.Get("IdP"));
            IdProyecto.Text=IdProy.ToString();
            var proy = Proyecto.GetProyecto(IdProy);
            txtValTotalPB.Number = Math.Round(proy.CostoTotal - proy.Saldo,2);
            txtValSaldoPagar.Number =Math.Round (proy.Saldo,2);
            txtInversionTotal1.Number = (proy.CostoTotal);
            
            sDesembolsos.DataSource = proy.Desembolsos;
            sDesembolsos.DataBind();

            //
          
            //Tipo=0 => Realiza operaciones
            if (iTipo==0)
            {
                btnNuevoDesembolso.Disabled = false;
                //btnGuardar.Disabled = false;
                btnIngresarDesembolso.Disabled = false;
                btnNuevoDesembolso.Hidden = false; 
            }
            else
            {
                //Tipo=1 =>Solo lectura
                btnNuevoDesembolso.Disabled = true;
                //btnGuardar.Disabled = true;
                btnIngresarDesembolso.Disabled = true;
                btnNuevoDesembolso.Hidden = true;
            }
           
            winDesembolsoProyecto.Show();
        }
        /// <summary>
        /// Tipo=0 => Realiza operaciones Tipo=1 =>Solo lectura
        /// </summary>
        /// <param name="iTipo">int </param>
        public void SetValueItipo(int iTipo)
        {
            hidTipoAcseso.SetValue(iTipo);
        }

        protected void Eliminar_Editar_Desembolso(object sender, DirectEventArgs e)
        {
            try
            {
                    int idd, idp;
                    int.TryParse(e.ExtraParams["IDD"], out idd);
                    int.TryParse(e.ExtraParams["IDP"], out idp);
                    string operacion = e.ExtraParams["Operacion"];
                    var proyecto = Proyecto.GetProyecto(idp);
                    switch (operacion)
                    {
                       case "Eliminar":
                                   
                                   
                                    for (int i = 0; i < proyecto.Desembolsos.Count; i++)
                                    {
                                        if (proyecto.Desembolsos[i].Id==idd)
                                        {
                                            proyecto.Desembolsos.RemoveAt(i);
                                            break;
                                        }
                                    }
                                    proyecto = proyecto.Save();
                                    X.Js.AddScript("#{hidMontoEli}.setValue(record.data.ValorPlanilla);ConfirmDelDes('ok');alert('El desembolso se elimino correctamente');");
                                    e.Success = true;
                            break;
                            case "Editar":
                            Documento myDoc = new Documento();
                            
                              var desem = proyecto.Desembolsos.FirstOrDefault(p => p.Id == idd);
                              StoreDocumentos.DataSource = desem.DocumentosDesembolsos;
                              StoreDocumentos.DataBind();
                              e.Success = true;
                            break;
                   }
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }

        #region Ventana Desembolso

        public void NuevoDesembolso_Click(object sender, DirectEventArgs e)
        {
            LimpiarDesembolso();

            MostrarVentanaDesembolso();
        }

        public void MostrarVentanaDesembolso()
        {
            wInfoDesembolso.Show();
            wInfoDesembolso.Center();
            
            if (Session["NombreUsuario"]!=null)
            {
                txtResponsableDesembolso.Text = Session["NombreUsuario"].ToString();
            }
        }

        public void OcultarVentanaDesembolso()
        {
            wInfoDesembolso.Hide();
        }

        public void btnIngresarDesembolso_Click(object sender, DirectEventArgs e)
        {
            OcultarVentanaDesembolso();
        }

        public void btnCancelarDesembolso_Click(object sender, DirectEventArgs e)
        {
            LimpiarDesembolso();
            OcultarVentanaDesembolso();
        }

        public void LimpiarDesembolso()
        {
            dfFecha.Value = "";
            //cbxTipoTransaccion.Value = "";
            txtResponsableDesembolso.Text = "";
            txtMontoTransferencia.Text = "0";


            txtValorPlanilla.Text = "0";
            txtObservacionInfoDesembolso.Text = "";

            txtTipoDocumento.Text = "";
            fufArchivosPP.Text = "";
            StoreDocumentos.RemoveAll();
            StoreDocumentos.DataBind();

        }
        /// <summary>
        /// Invoca metodo para actualizar datos de la grid
        /// </summary>
        private static void CallRefreshGridParent()
        {
            X.Js.AddScript("var storeTmp=#{StoreProyectos}; if (storeTmp!=null)storeTmp.load();");
        }
        protected void btnGuardar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                int idd;
                int.TryParse(e.ExtraParams["IDD"], out idd);
                string jsonDesembolsos = e.ExtraParams["PDesembolsos"];
                int IdProy             = Convert.ToInt32(e.ExtraParams["IdProyecto_prm"]);//IdProyecto.Text
                string DocP            = e.ExtraParams["DocumentosP"];
                Proyecto proy          = Proyecto.GetProyecto(IdProy);
              
                //Documentos del Desembolsos
                StoreDataHandler sdhDocP = new StoreDataHandler(DocP);
                ChangeRecords<Documento> crDocp = sdhDocP.ObjectData<Documento>();

                
                //Proyecto Coordinadores
                StoreDataHandler sdhDesembolsos = new StoreDataHandler(jsonDesembolsos);
                ChangeRecords<ProyectoDesembolso> crsdhDesembolsos = sdhDesembolsos.ObjectData<ProyectoDesembolso>();
                foreach (ProyectoDesembolso desembolso in crsdhDesembolsos.Updated)
                {
                    int indice = proy.Desembolsos.IndexOf(proy.Desembolsos.FirstOrDefault(x => x.Id == desembolso.Id));
                    Csla.Data.DataMapper.Map(desembolso, proy.Desembolsos[indice]);
   
                }
                foreach (ProyectoDesembolso desembolso in crsdhDesembolsos.Created)
                {
                    foreach (var docp in crDocp.Created)
                    {
                        docp.Tipo = 6;
                        desembolso.DocumentosDesembolsos.Add(docp);
                    }
                    proy.Desembolsos.Add(desembolso);
                   
                }
                if (crsdhDesembolsos.Created.Count==0)
                {
                    ProyectoDesembolso desembolsoTmp = proy.Desembolsos.FirstOrDefault(p => p.Id == idd);
                    foreach (var docp in crDocp.Created)
                    {
                        docp.Tipo = 6;
                        desembolsoTmp.DocumentosDesembolsos.Add(docp);
                    }
                }
                //
                proy = proy.Save();
                sDesembolsos.DataSource = proy.Desembolsos;
                sDesembolsos.DataBind();
                //CallRefreshGridParent();

                //Envio de Emails nuevos desembolsos
                foreach (ProyectoDesembolso desembolso in crsdhDesembolsos.Created)
                {
                    try
                    {
                        Mail.EnviarMail("", Session["Email"].ToString(), "Aviso de Desembolso", "Monto de desembolso es el siguiente:" + desembolso.Saldo.ToString());
                    }
                    catch
                    { }
                }
                e.Success = true;
                X.Msg.Show(new MessageBoxConfig
                {
                    Title = "Desembolsos",
                    Message = "El desembolso se guardo correctamente.",
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.INFO
                });
            }
            catch (Exception ex)
            {
                e.Success = false;
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.ERROR,
                    Title = "Fallo",
                    Message = "Ocurrio un error al guardar Desembolso"
                });
                Util.RegistarLog(ex.ToString());
            }
        }
        #endregion
        public void SubirArchivo_Click(object sender, DirectEventArgs e)
        {
            string mensaje = "";
            try
            {
                string nombre = "";
                nombre = fufArchivosPP.PostedFile.FileName;
                nombre = UtilP.FormarNombre(nombre);

                fufArchivosPP.PostedFile.SaveAs(MapPath(string.Format("~/{0}{1}", ConfigurationManager.AppSettings.Get("PathFiles"), nombre)));
                fufArchivosPP.SetValue(nombre);

                if (this.fufArchivosPP.HasFile)
                {
                    mensaje = string.Format("Subido el archivo Correctamente: {0}<br/>Size: {1} bytes", this.fufArchivosPP.PostedFile.FileName, this.fufArchivosPP.PostedFile.ContentLength);
                    UtilP.MostrarNotificacion(mensaje, "Subir Archivo", MessageBox.Icon.INFO);

                    hiTipoDoc.SetValue(this.fufArchivosPP.PostedFile.ContentType);
                    hiTamano.SetValue(this.fufArchivosPP.PostedFile.ContentLength);
                    hiRuta.SetValue(nombre);
                    hiTipo.SetValue(txtTipoDocumento.Text);
                }
                else
                    UtilP.MostrarNotificacion("Archivo no fue subido!!!", "Subir Archivo", MessageBox.Icon.ERROR);
            }
            catch
            {
                UtilP.MostrarNotificacion("Archivo no fue subido!!!", "Subir Archivo", MessageBox.Icon.ERROR);
            }
        }
        protected void CommandVer_Eliminar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                        string operacion = e.ExtraParams["Operacion"];
                        switch (operacion)
                        {
                            case "Ver":
                                       //string ruta = string.Format("{0}{1}", UtilP.RUTA_ARCHIVOS, e.ExtraParams["Nombre"]);
                                        string ruta = string.Format("{0}{1}", UtilP.RUTA_ARCHIVOS, e.ExtraParams["Nombre"]);
                                        winVerArchivo.LoadContent(ruta);
                                        winVerArchivo.SetTitle(e.ExtraParams["Nombre"]);

                                        winVerArchivo.Show();
                                        break;
                            case "Eliminar":
                                        int idd, idp,idr;
                                        int.TryParse(e.ExtraParams["IDD"] ,out idd);
                                        int.TryParse(e.ExtraParams["IDP"], out idp);
                                        int.TryParse(e.ExtraParams["IDR"], out idr);
                                        var proyecto = Proyecto.GetProyecto(idp);
                                        var desem    = proyecto.Desembolsos.FirstOrDefault(p=>p.Id==idd);

                                        for (int i = 0; i < desem.DocumentosDesembolsos.Count; i++)
                                        {
                                                if (desem.DocumentosDesembolsos[i].Id == idr)
                                                {
                                                    desem.DocumentosDesembolsos.RemoveAt(i);
                                                    break;
                                                }
                                        }
                                        proyecto = proyecto.Save();
                                        e.Success = true;
                                        break;
                        }

            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
            }
        }
    }
}
